Include "folder" in events.

Akinori MUSHA 10 years ago
parent
commit
2b8cfe95b9
2 changed files with 15 additions and 5 deletions
  1. 9 5
      app/models/agents/imap_folder_agent.rb
  2. 6 0
      spec/models/agents/imap_folder_agent_spec.rb

+ 9 - 5
app/models/agents/imap_folder_agent.rb

@@ -75,6 +75,7 @@ module Agents
75 75
       Events look like this:
76 76
 
77 77
           {
78
+            "folder": "INBOX",
78 79
             "subject": "...",
79 80
             "from": "Nanashi <nanashi.gombeh@example.jp>",
80 81
             "to": ["Jane <jane.doe@example.com>"],
@@ -273,6 +274,7 @@ module Agents
273 274
         end
274 275
 
275 276
         create_event :payload => {
277
+          'folder' => mail.folder,
276 278
           'subject' => mail.subject,
277 279
           'from' => mail.from_addrs.first,
278 280
           'to' => mail.to_addrs,
@@ -355,14 +357,14 @@ module Agents
355 357
       end
356 358
 
357 359
       def select(folder)
358
-        ret = super
360
+        ret = super(@folder = folder)
359 361
         @uidvalidity = responses['UIDVALIDITY'].last
360 362
         ret
361 363
       end
362 364
 
363 365
       def fetch_mails(set)
364 366
         fetch(set, %w[UID RFC822.HEADER]).map { |data|
365
-          Message.new(self, @uidvalidity, data)
367
+          Message.new(self, data, folder: @folder, uidvalidity: @uidvalidity)
366 368
         }
367 369
       end
368 370
     end
@@ -370,11 +372,13 @@ module Agents
370 372
     class Message < SimpleDelegator
371 373
       DEFAULT_BODY_MIME_TYPES = %w[text/plain text/enriched text/html]
372 374
 
373
-      attr_reader :uidvalidity, :uid
375
+      attr_reader :uid, :folder, :uidvalidity
374 376
 
375
-      def initialize(client, uidvalidity, fetch_data)
377
+      def initialize(client, fetch_data, props = {})
376 378
         @client = client
377
-        @uidvalidity = uidvalidity
379
+        props.each { |key, value|
380
+          instance_variable_set(:"@#{key}", value)
381
+        }
378 382
         attr = fetch_data.attr
379 383
         @uid = attr['UID']
380 384
         super(Mail.read_from_string(attr['RFC822.HEADER']))

+ 6 - 0
spec/models/agents/imap_folder_agent_spec.rb

@@ -19,6 +19,10 @@ describe Agents::ImapFolderAgent do
19 19
       @checker.save!
20 20
 
21 21
       message_mixin = Module.new {
22
+        def folder
23
+          'INBOX'
24
+        end
25
+
22 26
         def uidvalidity
23 27
           '100'
24 28
         end
@@ -54,6 +58,7 @@ describe Agents::ImapFolderAgent do
54 58
 
55 59
       @payloads = [
56 60
         {
61
+          'folder' => 'INBOX',
57 62
           'from' => 'nanashi.gombeh@example.jp',
58 63
           'to' => ['jane.doe@example.com', 'john.doe@example.com'],
59 64
           'cc' => [],
@@ -65,6 +70,7 @@ describe Agents::ImapFolderAgent do
65 70
           'mime_type' => 'text/plain',
66 71
         },
67 72
         {
73
+          'folder' => 'INBOX',
68 74
           'from' => 'john.doe@example.com',
69 75
           'to' => ['jane.doe@example.com', 'nanashi.gombeh@example.jp'],
70 76
           'cc' => [],